package br.com.glh.giza.entity;

import java.util.Set;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

/**
 * The persistent class for the produto database table.
 * 
 */
@Entity
@Table(name = "produto", uniqueConstraints = {
		@UniqueConstraint(name = "UNQ_descricao", columnNames = { "descricao" }),
		@UniqueConstraint(name = "UNQ_referencia", columnNames = { "referencia" }) })
public class Produto extends AbstractEntity {
	private static final long serialVersionUID = 1L;

	@Basic(optional = false)
	@Column(name = "descricao", nullable = false, length = 255)
	private String descricao;

	@Enumerated(EnumType.STRING)
	@Column(name = "faixa_etaria", nullable = true, length = 255)
	private FaixaEtaria faixaEtaria;

	@Enumerated(EnumType.STRING)
	@Column(name = "genero", nullable = true, length = 255)
	private Genero genero;

	@Basic(optional = false)
	@Column(name = "referencia", nullable = false, length = 255)
	private String referencia;

	@ManyToOne(optional=false)
	@JoinColumn(name = "tipo_produto_id", nullable = false)
	private TipoProduto tipoProduto;

	@ManyToOne(optional=false)
	@JoinColumn(name = "fabricante_id", nullable = false)
	private Fabricante fabricante;

	@ManyToMany
	@JoinTable(name = "produto_cor", joinColumns = { @JoinColumn(name = "produto_id", nullable = false) }, inverseJoinColumns = { @JoinColumn(name = "cor_id", nullable = false) })
	private Set<Cor> cores;

	public Produto() {
	}

	public String getDescricao() {
		return this.descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public FaixaEtaria getFaixaEtaria() {
		return this.faixaEtaria;
	}

	public void setFaixaEtaria(FaixaEtaria faixaEtaria) {
		this.faixaEtaria = faixaEtaria;
	}

	public Genero getGenero() {
		return this.genero;
	}

	public void setGenero(Genero genero) {
		this.genero = genero;
	}

	public String getReferencia() {
		return this.referencia;
	}

	public void setReferencia(String referencia) {
		this.referencia = referencia;
	}

	public TipoProduto getTipoProduto() {
		return this.tipoProduto;
	}

	public void setTipoProduto(TipoProduto tipoProduto) {
		this.tipoProduto = tipoProduto;
	}

	public Fabricante getFabricante() {
		return this.fabricante;
	}

	public void setFabricante(Fabricante fabricante) {
		this.fabricante = fabricante;
	}

	public Set<Cor> getCores() {
		return this.cores;
	}

	public void setCores(Set<Cor> cores) {
		this.cores = cores;
	}

}